package com.xyc.javase.juc.threadtest;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

/**
 * @Version 1.0
 * @Author:徐衍程
 * @Date:2022/6/10
 * @Content:
 */
public class ExcutorTest {

    public static void main(String args[]) throws InterruptedException {
        //excutors常用方法
        excutorsTest();


    }

    /**
     * shutdown 方法将执行平缓的关闭过程：不在接受新的任务，同时等待已经提交的任务执行完成---包括那些还未开始执行的任务。
     * shutdownNow 方法将执行粗暴的关闭过程：他将尝试取消所有运行中的任务，并且不再启动队列中尚未开始执行的任务。
     * isShutdown 判断之前是否调用过shutdown
     * isTerminated 判断所有提交的任务是否完成（保证之前调用过shutdown方法）
     * awaitTermination 调用shutdown方法后，等待所有任务执行完成
     * @throws InterruptedException
     */
    private static void excutorsTest() throws InterruptedException {
        ExecutorService pool = Executors.newFixedThreadPool(5);
        for (int i = 0; i < 10; i++) {
            pool.submit(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("runnable complete...");
                }
            });
        }
        pool.shutdown();
        System.out.println("pool shutdown:" + pool.isShutdown());
        while (!pool.isTerminated()) {
            //当使用awaitTermination时，主线程会处于一种等待的状态，等待线程池中所有的线程都运行完毕后才继续运行。
            pool.awaitTermination(1, TimeUnit.SECONDS);
        }
        System.out.println("all task complete");
    }
}
